/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.sgc.view.mbean;

import com.brain.core.common.UtilCore;
import com.brain.core.configuracion.WebServletContextListener;
import com.brain.core.dto.ArchivoDto;
import com.brain.core.dto.ParametroDto;
import com.brain.core.dto.UbigeoDto;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.RecursosManager;
import com.brain.core.view.mbean.ApplicationMBean;
import com.brain.core.view.mbean.ArchivoMBean;
import com.brain.core.view.mbean.GenericMBean;
import com.brain.core.view.mbean.SessionMBean;
import com.brain.core.view.util.ApplicationHelper;
import com.brain.core.view.util.ConstantesCore;
import com.brain.sele.dto.CalificacionDto;
import com.brain.sele.dto.PostulanteDto;
import com.brain.sele.dto.RequerimientoDto;
import com.brain.sele.manager.CalificacionManager;
import com.brain.sele.manager.PostulanteManager;
import com.brain.sele.view.util.ConstantesSele;
import com.brain.sgc.dto.ConocimientoAdicionalDto;
import com.brain.sgc.dto.ConocimientoInformaticaDto;
import com.brain.sgc.dto.EstudioDto;
import com.brain.sgc.dto.ExperienciaDto;
import com.brain.sgc.dto.IdiomaDto;
import com.brain.sgc.dto.PersonaDto;
import com.brain.sgc.dto.ReferenciaDto;
import com.brain.sgc.manager.ConocimientoAdicionalManager;
import com.brain.sgc.manager.ConocimientoInformaticaManager;
import com.brain.sgc.manager.EstudioManager;
import com.brain.sgc.manager.ExperienciaManager;
import com.brain.sgc.manager.IdiomaManager;
import com.brain.sgc.manager.PersonaManager;
import com.brain.sgc.manager.ReferenciaManager;
import com.brain.sgc.view.util.ConstantesSgc;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.annotation.Resource;
import javax.faces.event.ActionEvent;
import javax.mail.internet.InternetAddress;
import net.sf.jasperreports.engine.JRException;
import org.apache.log4j.Logger;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Christian
 */
@Controller("personaMBean")
@Scope("session")
public class PersonaMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(PersonaMBean.class);
    @Resource
    private PersonaManager manager;
    @Resource
    private EstudioManager estudioManager;
    @Resource
    private IdiomaManager idiomaManager;
    @Resource
    private ExperienciaManager experienciaManager;
    @Resource
    private ConocimientoAdicionalManager conocimientoAdicionalManager;
    @Resource
    private ConocimientoInformaticaManager informaticaManager;
    @Resource
    private CalificacionManager calificacionjManager;
    @Resource
    private PostulanteManager postulanteManager;
    @Resource
    private RecursosManager recursosManager;
    private List<PersonaDto> lista;
    private PersonaDto dto;
    private int accionPersona;
    private PersonaDto dtoFiltro;
    private String keyTitulo = "persona.panel";
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;
    //Nuevo Estudio
    private int accionEstudio;
    private EstudioDto estudioDto;
    private List<ParametroDto> listaNivel;
    private List<ParametroDto> listaEstadoEstudio;
    private List<ParametroDto> listaProfesion;
    //Parametros Idioma
    private IdiomaDto idiomaDto;
    private ParametroDto idiomaParametroDto;
    private String oral;
    private String escrito;
    private List<ParametroDto> listaIdioma;
    //Parametros Herramientas Office
    private ConocimientoInformaticaDto informaticaDto;
    private ParametroDto informaticaParametroDto;
    private String nivelInformatica;
    private List<ParametroDto> listaHerramientaOffice;
    //Parametros Conocimiento Adicional
    private ConocimientoAdicionalDto conocimientoAdicionalDto;
    private String tituloConocAdicional;
    private String descripcionConocAdicional;
    //Parametros Experiencia Profesional
    private int accionExperiencia;
    private ExperienciaDto experienciaDto;
    private List<ParametroDto> listaArea;
    private List<ParametroDto> listaIndustria;
    //Referencia
    private ReferenciaDto referenciaDto;
    private String descripcionReferencia;
    @Resource
    private ReferenciaManager referenciaManager;
    private List<ParametroDto> listaSexosFiltro;
    private List<ParametroDto> listaEstadoCivilFiltro;
    private List<ParametroDto> listaTipoDocumentoFiltro;
    private List<ParametroDto> listaSexos;
    private List<ParametroDto> listaEstadoCivil;
    private List<ParametroDto> listaTipoDocumento;
    private List<ParametroDto> listaTipoMoneda;
    private Boolean accesoBtnGuardar = Boolean.TRUE;
    private List<CalificacionDto> listaEvaluaciones;
    private List<RequerimientoDto> listaRequerimientoDto;
    private RequerimientoDto requerimientoDto;
    private List<ParametroDto> listaTipoDoc;
    private List<ParametroDto> listaSexo;
    private List<ParametroDto> listaSedesFiltro;
    private List<ParametroDto> listaTiposArchivo;
    //Files
    @Resource
    private ArchivoMBean archivoMBean;

    public PersonaMBean() {
        this.dtoFiltro = new PersonaDto();
    }

    public String iniciar() {
        this.dto = null;
        this.lista = null;
        this.dtoFiltro = new PersonaDto();
        this.dtoFiltro.setSedeDto(new ParametroDto());
        //this.dtoFiltro.setEstado(Boolean.TRUE);
        return ConstantesSgc.UrlNavegacion.URL_LISTA_PERSONA;
    }

    public String iniciarHistorial() {
        this.dto = null;
        this.lista = null;
        this.dtoFiltro = new PersonaDto();
        return ConstantesSgc.UrlNavegacion.URL_LISTA_PERSONAS_HISTORIAL;
    }

    public String iniciarLegajo() {
        this.lista = null;
        this.dtoFiltro = new PersonaDto();
        return ConstantesSgc.UrlNavegacion.URL_LISTA_PERSONAS_LEGAJO;
    }

    public String nuevo() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.lista = new ArrayList<PersonaDto>();
        this.dto = new PersonaDto();
        this.estudioDto = this.estudioManager.inicializar();
        this.idiomaDto = this.idiomaManager.inicializar();
        this.dto.setEmp(Boolean.FALSE);
        this.dto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
        this.dto.setTerminal(sessionMBean.getSessionTerminal());
        this.dto.setEstadoDto(new ParametroDto(ConstantesCore.Parametro.USUARIO_ESTADO_ACTIVO));
        this.dto.setUsuario(sessionMBean.getSessionUsuarioDto().getId());
        this.dto.setListaEstudios(new ArrayList<EstudioDto>());
        this.dto.setListaIdiomas(new ArrayList<IdiomaDto>());
        this.dto.setListaConocInformatica(new ArrayList<ConocimientoInformaticaDto>());
        this.dto.setListaConocAdicional(new ArrayList<ConocimientoAdicionalDto>());
        this.dto.setListaExperiencias(new ArrayList<ExperienciaDto>());
        this.dto.setListaReferencias(new ArrayList<ReferenciaDto>());

        if (this.dto.getTipoMonedaDto() == null) {
            this.dto.setTipoMonedaDto(new ParametroDto());
        }
        if (this.dto.getNacionalidadDto() == null) {
            this.dto.setNacionalidadDto(new UbigeoDto());
        }
        this.dto.getTipoMonedaDto().setId(11L);
        this.dto.getNacionalidadDto().setId(ConstantesCore.Parametro.UBIGEO_PERU);

        return ConstantesSgc.UrlNavegacion.URL_PERSONA;
    }

    public String editar() {
        sessionMBean().setAccion(ConstantesSgc.Formulario.EDITAR);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        this.estudioDto = this.estudioManager.inicializar();
        this.experienciaDto = this.experienciaManager.inicializar();
        ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.PERSONA, this.dto.getId());
        //this.cargarDatosDialogDetalle();
        recuperarDtoPadre();
        archivoMBean.cargarArchivos(ConstantesCore.Entidad.PERSONA, this.dto.getId());
        return ConstantesSgc.UrlNavegacion.URL_PERSONA;
    }

    public String ver() {
        sessionMBean().setAccion(ConstantesSgc.Formulario.VER);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        //this.cargarDatosDialogDetalle();
        ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.PERSONA, this.dto.getId());
        return ConstantesSgc.UrlNavegacion.URL_PERSONA;
    }

    public String verHistorial() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.VER);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        //ApplicationHelper.cargarPropietarios(ConstantesSgc.Entidad.REQUERIMIENTO, this.dto.getId());
        this.cargarRequerimientosPorPersona();
        return ConstantesSgc.UrlNavegacion.URL_PERSONA_HISTORIAL;
    }

    protected void cargarRequerimientosPorPersona() {
        try {
            this.listaRequerimientoDto = new ArrayList<RequerimientoDto>();
            List<PostulanteDto> listaPost = this.postulanteManager.obtenerPostulantesPorPersona(this.dto.getId());
            for (PostulanteDto post : listaPost) {
                post.getRequerimientoDto().setIdPostHistorial(post.getId());
                if (post.getNotaFinal() != null) {
                    post.getRequerimientoDto().setNotaFinalHistorial(post.getNotaFinal().toString());
                } else {
                    post.getRequerimientoDto().setNotaFinalHistorial("-");
                }

                if (post.getAcumulado() != null) {
                    post.getRequerimientoDto().setNotaAcumuladaHistorial(post.getAcumulado().toString());
                } else {
                    post.getRequerimientoDto().setNotaAcumuladaHistorial("-");
                }

                post.getRequerimientoDto().setEstadoHistorial(post.getEstadoDto().getDescripcion());
                this.listaRequerimientoDto.add(post.getRequerimientoDto());

            }
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void cargarPopupEvaluaciones() {
        try {
            //Obtenemos el id del postulante
            this.listaEvaluaciones = this.calificacionjManager.obtenerCalificacionesPorPostulanteHistorial(this.requerimientoDto.getIdPostHistorial());
            for (CalificacionDto calif : this.listaEvaluaciones) {
            }
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void cargarDatosDialogDetalle() {
        //Cargamos los datos del dialog del detalle
        this.dto = this.manager.inicializar();
        this.accionPersona = ConstantesCore.Formulario.NUEVO;
    }

    public void buscar(ActionEvent ae) {

        try {
            this.lista = this.manager.obtenerPersonas(this.dtoFiltro);
            logger.info("lista.size(): " + lista.size());
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }

    }

    public void buscarHistorial(ActionEvent ae) {

        try {
            this.lista = this.manager.obtenerPersonasHistorial(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }

    }

    //Este metodo busca en general empleados de CMAC
    public void buscarEmpleadoCMAC() {

        try {
            this.lista = this.manager.obtenerEmpleados(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }

    }

    public void buscarPersonas() {
        try {
            this.lista = this.manager.obtenerPersonasParaConvocatoria(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }

    }

    public void buscarPersonasEncuestas() {
        try {
            this.lista = this.manager.obtenerPersonasParaEncuesta(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }

    }

    public String verLegajo() {
        LegajoMBean legajoMBean = (LegajoMBean) WebServletContextListener.getApplicationContext().getBean("legajoMBean");
        legajoMBean.setPersonaDto(this.dto);
        legajoMBean.setUrlInvocador(ConstantesSgc.UrlNavegacion.URL_LISTA_PERSONAS_LEGAJO);
        return legajoMBean.iniciar();
    }

    private boolean isValidDatosPersona(PersonaDto dto) {
        boolean validaPersona = Boolean.TRUE;
        try {
            List<PersonaDto> lPersonDto = this.manager.obtenerPersonaTipoYNroDocumento(dto.getTipoDocumentoDto().getId(), dto.getNumeroDocumento());
            if (!this.manager.obtenerPersonaTipoYNroDocumento(dto.getTipoDocumentoDto().getId(), dto.getNumeroDocumento()).isEmpty()) {
                recursosManager.showWarning("El Tipo y Número de documento ingresado ya existe en la BD.");
                validaPersona = false;
            }

            if (this.manager.obtenerPersonaPorEmail(dto.getEmail()) != null
                    && this.manager.obtenerPersonaPorEmail(dto.getEmail()).size() > 0) {
                recursosManager.showWarning("El email ingresado ya existe en la BD.");
                validaPersona = false;
            }

            InternetAddress mail = new InternetAddress();
            mail.setAddress(dto.getEmail());
        } catch (DAOException e) {
            logger.error(e);
        }
        return validaPersona;
    }

    private boolean isValidDatosEstudio(EstudioDto dto) {
        boolean validaEstudio = Boolean.TRUE;

        if (dto.getFechaFin() != null && dto.getFechaInicio() != null) {
            if (dto.getFechaFin().compareTo(dto.getFechaInicio()) <= 0) {
                recursosManager.showWarning("La Fecha de Fin no puede ser menor a la Fecha de Inicio.");
                validaEstudio = false;
            }
        }

        if (dto.getMateriaAprobada() != null && dto.getMateriaCantidad() != null) {
            if (dto.getMateriaAprobada() > dto.getMateriaCantidad()) {
                recursosManager.showWarning("La cantidad de Materias Aprobadas no puede ser mayor a la cantidad de materias.");
                validaEstudio = false;
            }
        }

        return validaEstudio;
    }

    private boolean isValidDatosIdioma(IdiomaDto dto) {
        boolean validaIdioma = Boolean.TRUE;
        try {
            if (this.idiomaManager.obtenerCantidad(dto) > 0) {
                recursosManager.showWarning("El Idioma ingresado ya existe en la BD.");
                validaIdioma = false;
            }
        } catch (DAOException e) {
            logger.error(e);
        }
        return validaIdioma;
    }

    private boolean isValidDatosInformatica(ConocimientoInformaticaDto dto) {
        boolean validaInformatica = Boolean.TRUE;
        try {
            if (this.informaticaManager.obtenerInformaticaPorDto(dto) != null
                    && this.informaticaManager.obtenerInformaticaPorDto(dto).size() > 0) {
                recursosManager.showWarning("La Herramienta Informática ya existe en la BD.");
                validaInformatica = false;
            }
        } catch (DAOException e) {
            logger.error(e);
        }
        return validaInformatica;
    }

    private boolean isValidDatosExperiencia(ExperienciaDto dto) {
        boolean validaExperiencia = Boolean.TRUE;

        if (dto.getFechaFin() != null && dto.getFechaInicio() != null) {
            if (dto.getFechaFin().compareTo(dto.getFechaInicio()) <= 0) {
                recursosManager.showWarning("La Fecha de Fin no puede ser menor a la Fecha de Inicio.");
                validaExperiencia = false;
            }
        }
        return validaExperiencia;
    }

    private boolean isValidDatosReferencia(ReferenciaDto dto) {
        boolean validaReferencia = Boolean.TRUE;
        if (dto.getDescripcion() == null || dto.getDescripcion().equals("")) {
            recursosManager.showWarning("La Descripción no puede estar vacía.");
            validaReferencia = false;
        }
        return validaReferencia;
    }

    private boolean isValidDatosConocimientoAdic(ConocimientoAdicionalDto dto) {
        boolean validaConocAdicional = Boolean.TRUE;
        try {
            if (this.conocimientoAdicionalManager.obtenerConocimientoAdicPorTitulo(dto) != null
                    && this.conocimientoAdicionalManager.obtenerConocimientoAdicPorTitulo(dto).size() > 0) {
                recursosManager.showWarning("El titulo ingresado ya existe en la BD.");
                validaConocAdicional = false;
            }
        } catch (DAOException e) {
            logger.error(e);
        }
        return validaConocAdicional;
    }

    public String guardar() {
        if (sessionMBean.getAccion() == ConstantesSgc.Formulario.NUEVO) {
            if (isValidDatosPersona(this.dto) == false) {
                logger.info("Datos inválidos. Se aborta el proceso de grabación.");
                return "";
            }
        }

        if (this.manager.guardar(this.dto) != null) {
            if (this.dto.getId() != null) {
                sessionMBean.setAccion(ConstantesSgc.Formulario.EDITAR);
            }
        }
        return "";
    }

    public void listenerFile(FileUploadEvent event) {
        UploadedFile file = event.getFile();

        ArchivoDto archivoDto = new ArchivoDto();
        archivoDto.setNombre(file.getFileName());
        archivoDto.setTipoDto(new ParametroDto(ConstantesCore.Parametro.ARCHIVO_TIPO_OTROS));
        archivoDto.setPeso(BigDecimal.valueOf(file.getSize()));
        archivoDto.setComentario("NUEVO ARCHIVO");
        archivoDto.setUsuario(this.sessionMBean.getSessionUsuarioDto().getId());
        archivoDto.setTerminal(this.sessionMBean.getSessionTerminal());
        archivoDto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
        archivoDto.setBites(file.getContents());
        archivoDto.setDetalle(archivoDto.getNombre());

        if (archivoDto.getNombre().indexOf(".") != -1) {
            archivoDto.setExtension(archivoDto.getNombre().substring(archivoDto.getNombre().lastIndexOf(".") + 1, archivoDto.getNombre().length()));
        }
        try {
            archivoMBean.grabarArchivo(archivoDto, ConstantesCore.Entidad.PERSONA, this.dto.getId());
        } catch (FileNotFoundException ex) {
            showError("ARCHIVO NO ENCONTRADO :: " + ex.getMessage());
            logger.error(ex);
        } catch (IOException ex) {
            showError("ERROR DE ENTRADA Y SALIDA :: " + ex.getMessage());
            logger.error(ex);
        }
        archivoMBean.cargarArchivos(ConstantesCore.Entidad.PERSONA, this.dto.getId());
    }

    public String retroceder() {
        buscar(null);
        sessionMBean.setAccion(ConstantesSgc.Formulario.LISTA);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        return ConstantesSgc.UrlNavegacion.URL_LISTA_PERSONA;
    }

    public String retrocederhistorial() {
        buscarHistorial(null);
        sessionMBean.setAccion(ConstantesSgc.Formulario.LISTA);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        return ConstantesSgc.UrlNavegacion.URL_LISTA_PERSONAS_HISTORIAL;
    }

    public String nuevoEstudio() {
        this.accionEstudio = ConstantesCore.Formulario.NUEVO;
        this.estudioDto = estudioManager.inicializar();
        return "";
    }

    public String editarEstudio() {
        this.accionEstudio = ConstantesCore.Formulario.EDITAR;
        //this.getListaParametrosPadre();
        ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.ESTUDIO, this.estudioDto.getId());
        return "";
    }

    public String verEstudio() {
        this.accionEstudio = ConstantesCore.Formulario.VER;
        //ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.ESTUDIO, this.estudioDto.getId());
        return "";
    }

    public void eliminarEstudio() {
        try {
            this.estudioManager.eliminar(this.estudioDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public String agregarEstudio() {
        if (isValidDatosEstudio(this.estudioDto) == false) {
            logger.info("Se aborta el proceso de grabado.");
            return "";
        }
        return this.estudioManager.guardar(this.estudioDto, this.accionEstudio, this.dto);
    }

    public void setEstudioPrincipal() {
        try {
            this.estudioManager.setEstudioPrincipal(this.estudioDto);
            this.recuperarDtoPadre();
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void agregarIdioma() {
        try {
            IdiomaDto idiomaDto = new IdiomaDto();
            idiomaDto.setIdiomaDto(this.idiomaParametroDto);
            idiomaDto.setPersonaDto(this.dto);
            idiomaDto.setOral(this.oral);
            idiomaDto.setEscrito(this.escrito);
            if (isValidDatosIdioma(idiomaDto) == false) {
                return;
            }
            this.idiomaManager.nuevo(idiomaDto);
            recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
        }
        this.idiomaParametroDto = null;
        this.oral = null;
        this.escrito = null;
    }

    public void eliminarIdioma() {
        try {
            this.idiomaManager.eliminar(this.idiomaDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public String imprimirDto() {
        try {
            String nombreArchivoReporte = "PERSONA_NRO_" + this.dto.getId();
            HashMap parametros = new HashMap();
            parametros.put("P_IDENTIFICADOR", BigDecimal.valueOf(this.dto.getId()));
            recursosManager.viewReportePdf(parametros, "RptPersona", nombreArchivoReporte);
            return null;
        } catch (FileNotFoundException ex) {
            showError("EL ARCHIVO NO SE ENCUENTRA");
            logger.error(ex);
        } catch (JRException ex) {
            logger.error(ex);
            showError("ERROR EN LA COMPILACIÓN DEL REPORTE");
        } catch (IOException ex) {
            showError("EL ARCHIVO ESTÁ DAÑADO");
            logger.error(ex);
        } catch (SQLException ex) {
            logger.error(ex);
            showError("ERROR EN LA CONSULTA DEL REPORTE");
        } finally {
            return null;
        }
    }

    public void agregarHerramientaInformatica() {
        try {
            ConocimientoInformaticaDto conocInformaticaDto = new ConocimientoInformaticaDto();
            conocInformaticaDto.setPersonaDto(this.dto);
            conocInformaticaDto.setHerramientaOfficeDto(this.informaticaParametroDto);
            conocInformaticaDto.setNivel(this.nivelInformatica);
            if (isValidDatosInformatica(conocInformaticaDto) == false) {
                logger.info("Se aborta el proceso de grabado.");
                return;
            }
            this.informaticaManager.nuevo(conocInformaticaDto);
            recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
        }
        this.informaticaParametroDto = null;
        this.nivelInformatica = null;
    }

    public void eliminarHerramientaInformatica() {
        try {
            this.informaticaManager.eliminar(this.informaticaDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public void agregarConocimientoAdicional() {
        try {
            ConocimientoAdicionalDto conocAdicionalDto = new ConocimientoAdicionalDto();
            conocAdicionalDto.setPersonaDto(this.dto);
            conocAdicionalDto.setTitulo(this.tituloConocAdicional);
            conocAdicionalDto.setDescripcion(this.descripcionConocAdicional);
            if (isValidDatosConocimientoAdic(conocAdicionalDto) == false) {
                logger.info("Se aborta el proceso de grabado.");
                return;
            }
            this.conocimientoAdicionalManager.nuevo(conocAdicionalDto);
            recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
        }
        this.tituloConocAdicional = null;
        this.descripcionConocAdicional = null;
    }

    public void eliminarConocimientoAdicional() {
        try {
            this.conocimientoAdicionalManager.eliminar(this.conocimientoAdicionalDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public String nuevaExperiencia() {
        this.accionExperiencia = ConstantesCore.Formulario.NUEVO;
        this.experienciaDto = experienciaManager.inicializar();
        return "";
    }

    public String editarExperiencia() {
        this.accionExperiencia = ConstantesCore.Formulario.EDITAR;
        //this.getListaParametrosPadre();
        ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.EXPERIENCIA, this.experienciaDto.getId());
        return "";
    }

    public String verExperiencia() {
        this.accionExperiencia = ConstantesCore.Formulario.VER;
        //ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.EXPERIENCIA, this.experienciaDto.getId());
        return "";
    }

    public void eliminarExperiencia() {
        try {
            this.experienciaManager.eliminar(this.experienciaDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public String agregarExperiencia() {
        if (isValidDatosExperiencia(this.experienciaDto) == false) {
            logger.info("Se aborta el proceso de grabado.");
            return "";
        }
        return this.experienciaManager.guardar(this.experienciaDto, this.accionExperiencia, this.dto);
    }

    public void agregarReferencia() {
        try {
            ReferenciaDto referenciaDto = new ReferenciaDto();
            referenciaDto.setPersonaDto(this.dto);
            referenciaDto.setDescripcion(this.descripcionReferencia);
            if (isValidDatosReferencia(referenciaDto) == false) {
                logger.info("Se aborta el proceso de grabado.");
                return;
            }
            this.referenciaManager.nuevo(referenciaDto);
            recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
        }
        this.descripcionReferencia = null;
    }

    public void eliminarReferencia() {
        try {
            this.referenciaManager.eliminar(this.referenciaDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    protected void recuperarDtoPadre() {
        try {
            this.dto = this.manager.obtenerPersonaPorId(this.dto.getId());
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public PersonaManager getManager() {
        return manager;
    }

    public void setManager(PersonaManager manager) {
        this.manager = manager;
    }

    public EstudioManager getEstudioManager() {
        return estudioManager;
    }

    public void setEstudioManager(EstudioManager estudioManager) {
        this.estudioManager = estudioManager;
    }

    public ExperienciaManager getExperienciaManager() {
        return experienciaManager;
    }

    public void setExperienciaManager(ExperienciaManager experienciaManager) {
        this.experienciaManager = experienciaManager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public int getAccionEstudio() {
        return accionEstudio;
    }

    public void setAccionEstudio(int accionEstudio) {
        this.accionEstudio = accionEstudio;
    }

    public EstudioDto getEstudioDto() {
        return estudioDto;
    }

    public void setEstudioDto(EstudioDto estudioDto) {
        this.estudioDto = estudioDto;
    }

    public List<ParametroDto> getListaNivel() {
        return this.recursosManager.addParametroaListaParametroPorCatalogo(this.recursosManager.obtenerParametrosActivosPorCatalogoExceptoAlgunos(ConstantesCore.CatalogoParametro.NIVEL_ESTUDIO, ConstantesCore.Parametro.NIVEL_ESTUDIO_OTROS), ConstantesCore.Parametro.NIVEL_ESTUDIO_OTROS);
    }

    public void setListaNivel(List<ParametroDto> listaNivel) {
        this.listaNivel = listaNivel;
    }

    public List<ParametroDto> getListaEstadoEstudio() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.ESTADO_ESTUDIO);
    }

    public void setListaEstadoEstudio(List<ParametroDto> listaEstadoEstudio) {
        this.listaEstadoEstudio = listaEstadoEstudio;
    }

    public List<ParametroDto> getListaProfesion() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.AREA_ESTUDIO);
    }

    public void setListaProfesion(List<ParametroDto> listaProfesion) {
        this.listaProfesion = listaProfesion;
    }

    public List<PersonaDto> getLista() {
        return lista;
    }

    public void setLista(List<PersonaDto> lista) {
        this.lista = lista;
    }

    public PersonaDto getDto() {
        return dto;
    }

    public void setDto(PersonaDto dto) {
        this.dto = dto;
    }

    public PersonaDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(PersonaDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public List<ParametroDto> getListaSexosFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCore.CatalogoParametro.GENERO_PERSONA, ConstantesCore.Parametro.TODOS);
    }

    public void setListaSexosFiltro(List<ParametroDto> listaSexosFiltro) {
        this.listaSexosFiltro = listaSexosFiltro;
    }

    public List<ParametroDto> getListaEstadoCivilFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCore.CatalogoParametro.ESTADO_CIVIL, ConstantesCore.Parametro.TODOS);
    }

    public void setListaEstadoCivilFiltro(List<ParametroDto> listaEstadoCivilFiltro) {
        this.listaEstadoCivilFiltro = listaEstadoCivilFiltro;
    }

    public List<ParametroDto> getListaTipoDocumentoFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCore.CatalogoParametro.DOCUMENTOS_DE_IDENTIFICACION, ConstantesCore.Parametro.TODOS);
    }

    public List<ParametroDto> getListaSexos() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.GENEROS);
    }

    public void setListaSexos(List<ParametroDto> listaSexos) {
        this.listaSexos = listaSexos;
    }

    public List<ParametroDto> getListaEstadoCivil() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.ESTADO_CIVIL);
    }

    public void setListaEstadoCivil(List<ParametroDto> listaEstadoCivil) {
        this.listaEstadoCivil = listaEstadoCivil;
    }

    public List<ParametroDto> getListaTipoDocumento() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.DOCUMENTOS_DE_IDENTIFICACION);
    }

    public void setListaTipoDocumento(List<ParametroDto> listaTipoDocumento) {
        this.listaTipoDocumento = listaTipoDocumento;
    }

    public List<ParametroDto> getListaTipoMoneda() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.MONEDAS_DEL_SISTEMA);
    }

    public void setListaTipoMoneda(List<ParametroDto> listaTipoMoneda) {
        this.listaTipoMoneda = listaTipoMoneda;
    }

    public Boolean getAccesoBtnGuardar() {
        return accesoBtnGuardar;
    }

    public void setAccesoBtnGuardar(Boolean accesoBtnGuardar) {
        this.accesoBtnGuardar = accesoBtnGuardar;
    }

    public IdiomaDto getIdiomaDto() {
        return idiomaDto;
    }

    public void setIdiomaDto(IdiomaDto idiomaDto) {
        this.idiomaDto = idiomaDto;
    }

    public ParametroDto getIdiomaParametroDto() {
        return idiomaParametroDto;
    }

    public void setIdiomaParametroDto(ParametroDto idiomaParametroDto) {
        this.idiomaParametroDto = idiomaParametroDto;
    }

    public String getOral() {
        return oral;
    }

    public void setOral(String oral) {
        this.oral = oral;
    }

    public String getEscrito() {
        return escrito;
    }

    public void setEscrito(String escrito) {
        this.escrito = escrito;
    }

    public IdiomaManager getIdiomaManager() {
        return idiomaManager;
    }

    public void setIdiomaManager(IdiomaManager idiomaManager) {
        this.idiomaManager = idiomaManager;
    }

    public List<ParametroDto> getListaIdioma() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.IDIOMAS_DEL_SISTEMA);
    }

    public void setListaIdioma(List<ParametroDto> listaIdioma) {
        this.listaIdioma = listaIdioma;
    }

    public ConocimientoInformaticaDto getInformaticaDto() {
        return informaticaDto;
    }

    public void setInformaticaDto(ConocimientoInformaticaDto informaticaDto) {
        this.informaticaDto = informaticaDto;
    }

    public ParametroDto getInformaticaParametroDto() {
        return informaticaParametroDto;
    }

    public void setInformaticaParametroDto(ParametroDto informaticaParametroDto) {
        this.informaticaParametroDto = informaticaParametroDto;
    }

    public String getNivelInformatica() {
        return nivelInformatica;
    }

    public void setNivelInformatica(String nivelInformatica) {
        this.nivelInformatica = nivelInformatica;
    }

    public ConocimientoInformaticaManager getInformaticaManager() {
        return informaticaManager;
    }

    public void setInformaticaManager(ConocimientoInformaticaManager informaticaManager) {
        this.informaticaManager = informaticaManager;
    }

    public List<ParametroDto> getListaHerramientaOffice() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.HERRAMIENTA_INFORMATICA);
    }

    public void setListaHerramientaOffice(List<ParametroDto> listaHerramientaOffice) {
        this.listaHerramientaOffice = listaHerramientaOffice;
    }

    public ConocimientoAdicionalDto getConocimientoAdicionalDto() {
        return conocimientoAdicionalDto;
    }

    public void setConocimientoAdicionalDto(ConocimientoAdicionalDto conocimientoAdicionalDto) {
        this.conocimientoAdicionalDto = conocimientoAdicionalDto;
    }

    public String getTituloConocAdicional() {
        return tituloConocAdicional;
    }

    public void setTituloConocAdicional(String tituloConocAdicional) {
        this.tituloConocAdicional = tituloConocAdicional;
    }

    public String getDescripcionConocAdicional() {
        return descripcionConocAdicional;
    }

    public void setDescripcionConocAdicional(String descripcionConocAdicional) {
        this.descripcionConocAdicional = descripcionConocAdicional;
    }

    public ConocimientoAdicionalManager getConocimientoAdicionalManager() {
        return conocimientoAdicionalManager;
    }

    public void setConocimientoAdicionalManager(ConocimientoAdicionalManager conocimientoAdicionalManager) {
        this.conocimientoAdicionalManager = conocimientoAdicionalManager;
    }

    public int getAccionExperiencia() {
        return accionExperiencia;
    }

    public void setAccionExperiencia(int accionExperiencia) {
        this.accionExperiencia = accionExperiencia;
    }

    public ExperienciaDto getExperienciaDto() {
        return experienciaDto;
    }

    public void setExperienciaDto(ExperienciaDto experienciaDto) {
        this.experienciaDto = experienciaDto;
    }

    public List<ParametroDto> getListaArea() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.AREA_EXPERIENCIA);
    }

    public void setListaArea(List<ParametroDto> listaArea) {
        this.listaArea = listaArea;
    }

    public List<ParametroDto> getListaIndustria() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.INDUSTRIA);
    }

    public void setListaIndustria(List<ParametroDto> listaIndustria) {
        this.listaIndustria = listaIndustria;
    }

    public ReferenciaDto getReferenciaDto() {
        return referenciaDto;
    }

    public void setReferenciaDto(ReferenciaDto referenciaDto) {
        this.referenciaDto = referenciaDto;
    }

    public String getDescripcionReferencia() {
        return descripcionReferencia;
    }

    public void setDescripcionReferencia(String descripcionReferencia) {
        this.descripcionReferencia = descripcionReferencia;
    }

    public ReferenciaManager getReferenciaManager() {
        return referenciaManager;
    }

    public void setReferenciaManager(ReferenciaManager referenciaManager) {
        this.referenciaManager = referenciaManager;
    }

    public int getAccionPersona() {
        return accionPersona;
    }

    public void setAccionPersona(int accionPersona) {
        this.accionPersona = accionPersona;
    }

    public List<CalificacionDto> getListaEvaluaciones() {
        return listaEvaluaciones;
    }

    public void setListaEvaluaciones(List<CalificacionDto> listaEvaluaciones) {
        this.listaEvaluaciones = listaEvaluaciones;
    }

    public List<RequerimientoDto> getListaRequerimientoDto() {
        return listaRequerimientoDto;
    }

    public void setListaRequerimientoDto(List<RequerimientoDto> listaRequerimientoDto) {
        this.listaRequerimientoDto = listaRequerimientoDto;
    }

    public RequerimientoDto getRequerimientoDto() {
        return requerimientoDto;
    }

    public void setRequerimientoDto(RequerimientoDto requerimientoDto) {
        this.requerimientoDto = requerimientoDto;
    }

    public List<ParametroDto> getListaTipoDoc() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCore.CatalogoParametro.DOCUMENTOS_DE_IDENTIFICACION, ConstantesCore.Parametro.TODOS);
    }

    public void setListaTipoDoc(List<ParametroDto> listaTipoDoc) {
        this.listaTipoDoc = listaTipoDoc;
    }

    public List<ParametroDto> getListaSexo() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesCore.CatalogoParametro.GENEROS, ConstantesCore.Parametro.TODOS);
    }

    public void setListaSexo(List<ParametroDto> listaSexo) {
        this.listaSexo = listaSexo;
    }

    public List<ParametroDto> getListaSedesFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesSele.CatalogoParametro.SEDES, ConstantesCore.Parametro.TODOS);
    }

    public void setListaSedesFiltro(List<ParametroDto> listaSedesFiltro) {
        this.listaSedesFiltro = listaSedesFiltro;
    }

    public List<ParametroDto> getListaTiposArchivo() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogo(ConstantesCore.CatalogoParametro.ARCHIVO_TIPO);
    }

    public void setListaTiposArchivo(List<ParametroDto> listaTiposArchivo) {
        this.listaTiposArchivo = listaTiposArchivo;
    }
}